/**
 * 
 * MindBox 2009
 */
package com.mindbox.viajes.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;

import com.mindbox.viajes.db.ConexionDAO;
import com.mindbox.viajes.dto.Evento;
import com.mindbox.viajes.dto.Itinerario;
import com.mindbox.viajes.exception.ExceptionBaseDatos;

/**
 * Clase para el acceso a datos de los itinerarios. MindBox 2009
 * 
 * @author Jaimoto
 * 
 */
public class DAOItinerario {
	/**
	 * Obtiene la lista de usuarios SIN ITINERARIOS.
	 * 
	 * @return
	 * @author Jaimoto
	 * @throws ExceptionBaseDatos
	 */
	public void crearItinerario(Itinerario itinerario)
			throws ExceptionBaseDatos {
		ConexionDAO conexion = null;
		ResultSet rs = null;
		PreparedStatement ps = null;
		int consecutivo = 0;
		try {
			conexion = new ConexionDAO();
			conexion.getConn().setAutoCommit(false);
			conexion.iniciarTransaccion();
			// CONSULTAR EL ULTIMO ID
			String sql = "INSERT INTO itinerario (itinerario_usuario_id) VALUES (?)";
			ps = conexion.getPreparedStatement(sql);
			ps.setString(1, itinerario.getUsuario().getId());
			int filas = ps.executeUpdate();
			if (filas != 1) {
				throw new ExceptionBaseDatos("Error al crear el itinerario");
			}
			sql = "SELECT MAX(itinerario_id) as max FROM itinerario";
			rs = conexion.executeQuery(sql);
			while (rs.next()) {
				consecutivo = rs.getInt("max");
			}
			ArrayList eventos = itinerario.getEventos();
			for (Iterator iterator = eventos.iterator(); iterator.hasNext();) {
				Evento evento = (Evento) iterator.next();
				sql = "INSERT INTO itinerario_evento (itinerario_evento_itinerario_id,itinerario_evento_evento_id) VALUES (?,?);";
				ps = conexion.getPreparedStatement(sql);
				ps.setInt(1, consecutivo );
				ps.setString(2, evento.getId() );
				filas = ps.executeUpdate();
				if (filas != 1) {
					throw new ExceptionBaseDatos("Error al crear el itinerario");
				}
			}
			conexion.commit();
		} catch (Exception e) {
			if (conexion != null) {
				try {
					conexion.rollBack();
				} catch (Exception e1) {
					throw new ExceptionBaseDatos(e.getMessage());
				}
			}
			e.printStackTrace();
			throw new ExceptionBaseDatos(e.getMessage());
		} finally {
			conexion.cerrarFinal(rs);
			conexion.cerrarFinal(ps);
			if (conexion != null)
				try {
					conexion.cerrarCon();
				} catch (SQLException e) {
					String msg = "Error al cerrar la BD al consultar usuarios";
					System.out.println(msg + ". Mensaje:" + e.getMessage());
					e.printStackTrace();
				}
		}
	}
}